package cfca.paperless.client.servlet._1_basic._1_04_ConcatPDFFileList;

import java.io.File;

import org.apache.commons.io.FileUtils;

import cfca.paperless.client.servlet.PaperlessClient;
import cfca.paperless.client.servlet.PaperlessConfig;
import cfca.paperless.client.util.Base64;
import cfca.paperless.client.util.IoUtil;
import cfca.paperless.client.util.StringUtil;

/**
 * @Description 合并PDF列表接口，使用示例。
 * 指定PDF文件路径或PDF文件数据。
 * 
 * @Author dell
 * @Date 2016-5-23
 * @CodeReviewer TODO
 */
public class AutoConcatPdfListTest01 {

    public static void main(String[] args) throws Exception {
        
        long timeStart = System.currentTimeMillis();// 开始时间

        System.out.println("AutoConcatPdfListTest01 START");

        PaperlessClient clientBean = new PaperlessClient(PaperlessConfig.url, 10000, 60000);// 无纸化基本接口的访问URL

        String pdfStr1 = "D:/测试数据/PDF/模板-电子保险单.pdf";
        String pdfSuffix = IoUtil.getFileNameSuffix(pdfStr1);
        if(!PaperlessConfig.PDF_FILE_SUFFIX.equals(pdfSuffix)){
            throw new Exception("所选文件不是pdf文件");
        }
        
        String pdfStr2 = "D:/测试数据/PDF/模板-团队出境旅游合同.pdf";
        pdfSuffix = IoUtil.getFileNameSuffix(pdfStr2);
        if(!PaperlessConfig.PDF_FILE_SUFFIX.equals(pdfSuffix)){
            throw new Exception("所选文件不是pdf文件");
        }
        
        String pdfFilePath1 = "./TestData/autoCalculatePdfHash.pdf";
        pdfSuffix = IoUtil.getFileNameSuffix(pdfFilePath1);
        if(!PaperlessConfig.PDF_FILE_SUFFIX.equals(pdfSuffix)){
            throw new Exception("所选文件不是pdf文件");
        }
        byte[] pdfFileData1 = FileUtils.readFileToByteArray(new File(pdfFilePath1));
        String pdfString1 = new String(Base64.encode(pdfFileData1), PaperlessConfig.DEFAULT_CHARSET);
        
        String pdfFilePath2 = "./TestData/tmp.pdf";
        pdfSuffix = IoUtil.getFileNameSuffix(pdfFilePath2);
        if(!PaperlessConfig.PDF_FILE_SUFFIX.equals(pdfSuffix)){
            throw new Exception("所选文件不是pdf文件");
        }
        byte[] pdfFileData2 =FileUtils.readFileToByteArray(new File(pdfFilePath2));
        String pdfString2 = new String(Base64.encode(pdfFileData2), PaperlessConfig.DEFAULT_CHARSET);

        StringBuilder pdfListXmlString = new StringBuilder();
        
        pdfListXmlString.append("<List>");
        pdfListXmlString.append("<InputFilePath>").append(Base64.encode(pdfStr1, PaperlessConfig.DEFAULT_CHARSET)).append("</InputFilePath>");
        pdfListXmlString.append("<InputFilePath>").append(Base64.encode(pdfStr2, PaperlessConfig.DEFAULT_CHARSET)).append("</InputFilePath>");
        pdfListXmlString.append("<Pdf>").append(pdfString1).append("</Pdf>");
        pdfListXmlString.append("<Pdf>").append(pdfString2).append("</Pdf>");
        pdfListXmlString.append("</List>");
        
        // 合成后的存放路径，存放于无纸化server端的路径下。当不为空时合并后的pdf存放路径会存放到ProofPdf表中，当为空时返回PDF文件数据，（可以为空）
        String outputFilePath = "";

        // 保存到临时PDF表中的pdfId，符合唯一约束（可以为空）
        // 不为空时，则在服务端的临时PDF表[TEMP_FILE_PDF]中，指定表中字段PDF_ID为此值，保存PDF文件数据，只保留1个小时，超时则清除。
        // 为空时，则不会在服务端保存PDF文件数据。
        //String savedPdfId = GUID.generateId();
        String savedPdfId = "";
        System.out.println("临时PDF表保存的pdfId=" + savedPdfId);
        
        String returnPdfOrNot = "true";// 是否返回pdf，默认为true，取值false时，OutputFilePath不能为空

        // 操作员编码或者机构号
        String operatorCode = PaperlessConfig.operatorCode;
        // 渠道编码，可以为空
        String channelCode = PaperlessConfig.channelCode;

        String result = clientBean.autoConcatPdfList(pdfListXmlString.toString(), outputFilePath, savedPdfId, returnPdfOrNot, operatorCode, channelCode);

        String code = StringUtil.getNodeText(result, "Code");
     
        // 返回值Code等于200代表后台处理成功
        if (code.equals("200")) {
            System.out.println("AutoConcatPdfListTest01 END OK");

            if("true".equals(returnPdfOrNot) || StringUtil.isEmpty(outputFilePath)) {
                byte[] pdfData = Base64.decode(StringUtil.getNodeText(result, "Pdf"));
                System.out.println(pdfData.length);
                IoUtil.write("./TestData/output/AutoConcatPdfListTest01.pdf", pdfData);
                
                String proofPdfId = StringUtil.getNodeText(result, "ProofPdfId");
                System.out.println("proofPdfId:" + proofPdfId);
            } else {
                System.out.println(result);
            }

        } else {
            // 处理结果为异常，打印出错误码和错误信息
            System.out.println("AutoConcatPdfListTest01 END NG");
            System.out.println(result);
        }

        long timeEnd = System.currentTimeMillis();// 结束时间
        System.out.println("##########" + "time used:" + (timeEnd - timeStart) + "##########");
    }

}
